package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	// "github.com/go-redis/redis/v8"
)

// var ctx = context.Background()

// var rdb = redis.NewClient(&redis.Options{
// 	Addr:     "localhost:6379",
// 	Password: "", // no password set
// 	DB:       1,  // use default DB
// 	PoolSize: 4,
// })

func index(w http.ResponseWriter, r *http.Request) {
	// r.ParseForm() // 解析参数，默认是不会解析的
	// fmt.Println(r.Form) // 这些信息是输出到服务器端的打印信息
	// fmt.Println("path", r.URL.Path)
	// fmt.Println("scheme", r.URL.Scheme)
	// fmt.Println(r.Form["url_long"])
	// fmt.Fprintf(w, "Hello world!") // 这个写入到 w 的是输出到客户端的
	content, _ := ioutil.ReadFile("../static/traffic_flow_rt.html")
	w.Write(content)
}

// func getData(w http.ResponseWriter, r *http.Request) {
// 	w.Header().Set("Content-Type", "application/json; charset=utf-8")
// 	// 从redis读取键

// 	// TODO 尝试将获取key和value的整个过程做成事务

// 	keys, _ := rdb.Keys(ctx, "*").Result()
// 	var values []string
// 	// for _, v := range keys {
// 	// 	values = append(values, v)
// 	// }
// 	values = append(values, keys...)
// 	vals, _ := rdb.MGet(ctx, values...).Result()

// 	// fmt.Println(vals)
// 	// var tmp []string
// 	// for _, item := range vals {
// 	// 	tmp = append(tmp, item.(string))
// 	// }
// 	data, _ := json.Marshal(vals)
// 	fmt.Println("send")
// 	fmt.Fprint(w, string(data))

// }

func testData(w http.ResponseWriter, r *http.Request) {
	// 发送个文件模拟压测
	// w.Header().Set("Content-Type", "application/json; charset=utf-8")
	fmt.Println("Get request.")

	jsonFile, err := os.Open(".ship_slice.json")
	if err != nil {
		fmt.Println(err)
	}
	defer jsonFile.Close()
	byteValue, _ := ioutil.ReadAll(jsonFile)
	stringValue := string(byteValue)

	fmt.Println("send")
	// fmt.Fprint(w, stringValue)
	b, err := json.MarshalIndent(stringValue, "", "    ")
	fmt.Println(string(b))

}

func test(w http.ResponseWriter, r *http.Request) {
	fmt.Fprint(w, "Hello, world! this is a test page")
}

func main() {
	http.HandleFunc("/", index) // 设置访问的路由
	// http.HandleFunc("/getData", getData)
	http.HandleFunc("/data/slice", testData)
	http.HandleFunc("/test", test)
	fs := http.FileServer(http.Dir("../static/"))
	http.Handle("/static/", http.StripPrefix("/static/", fs))
	err := http.ListenAndServe(":9090", nil) // 设置监听的端口
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
	// var nums []string
	// sids := []string{"water_level", "key", "dyn_data"}
	// for k := range sids {
	// 	nums = append(nums, sids[k])
	// }
	// vals, _ := rdb.MGet(ctx, nums...).Result()
	// data, _ := json.Marshal(vals)
	// // fmt.Println(data)
	// fmt.Println(string(data))

}
